// 导入数据库模块
const db = require('../db')
// 导入 bcryptjs 
const bcryptjs = require('bcryptjs')
// 加密返回给客户端的用户信息生成 token
const jwt = require('jsonwebtoken')
// 导入token秘钥
const config = require('../config')

exports.reg = (req, res) => {

    // 当用户点击注册 拿到注册信息
    const userInfo = req.body
    if (!userInfo.username || !userInfo.password) {
        // return res.send({
        //     status: 1,
        //     msg: '用户名或密码不能为空'
        // })
        return res.cc('用户名或密码不能为空')
    }
    res.send('reg注册成功')

    // 检验用户名是否重复
    const sql = `select * from ev_users where username=?`      // sql语句 
    // db.query()   执行sql语句
    db.query(sql, [userInfo.username], (err, res) => {
        if (err) return res.send({ status: 1, msg: err.msg })
        if (res.length > 0) {
            // return res.send({ status: 1, msg: '用户名已被占用,请输入其他用户名' })
            return res.cc('用户名已被占用,请输入其他用户名')
        }
    })

    // 用户名通过
    userInfo.password = bcryptjs.hashSync(userInfo.password, 8)  // 使用 bcryptjs 对用户密码进行加密
    const addSql = `INSERT into ev_users set?`
    db.query(addSql, {
        username: userInfo.username, password: userInfo.password
    }, (err, res) => {
        // if (err) return res.send({ status: 1, msg: err.msg })
        if (err) return res.cc(err)
        // 判断影响行数是否为 1 如果不是 也是失败
        if (res.affectedRows != 1) {
            // return res.send({ status: 1, msg: '注册用户失败' })
            return res.cc('注册用户失败')
        }
        // 注册成功
        // res.send({ ststus: 0, msg: '注册成功！' })
        res.cc('注册成功！', 0)
    })



}

exports.login = (req, res) => {
    const sql = `select * from ev_users where username=?`
    db.query(sql, req.body.username, (err, res) => {
        //判断用户名是否存在
        if (err) return res.cc(err)
        if (res.length > 0) return res.cc('该用户名已存在')
        // 判断密码是否是否和数据库中的一致
        const compareResult = bcryptjs.compareSync(res.body.password, res[0].password)
        if (!compareResult) {
            return res.cc('登录失败，密码填写错误')
        }
        // 生成token返回给客户端，todo:要剔除用户的密码和头像
        const user = { ...res[0], password: '' }
        // 对用户信息进行加密，生成token字符串
        const tokenStr = jwt.sign(user, config.jwtSecretkey, { expiresIn: config.expiresIn })
        res.send({ status: 0, msg: '登陆成功', token: "Bearer " + tokenStr })
    })
}